package com.ruoyi.delivery.service;

import com.ruoyi.delivery.domain.DelDeliveryOrderBatch;
import com.ruoyi.delivery.domain.DelTransportDetail;
import com.ruoyi.delivery.domain.DelTransportOrder;

import java.util.List;

public interface IDelTransportOrderService {
    /**
     * 根据条件筛选运输订单（支持分页）
     * @param logisticId 物流ID
     * @param trackingNumber 运单号（支持模糊搜索）
     * @param origin 发货地（支持模糊搜索）
     * @param destination 目的地（支持模糊搜索）
     * @param startDate 出发时间范围的起始日期
     * @param endDate 出发时间范围的结束日期
     * @param state 运单状态
     * @param customerType 客户类型
     * @param page 当前页码（从 1 开始）
     * @param pageSize 每页记录数
     * @return 满足条件的运输订单列表
     */
    List<DelTransportOrder> filterTransportOrders(
            String logisticId,
            String trackingNumber,
            String origin,
            String destination,
            String startDate,
            String endDate,
            String state,
            String customerType,
            int page,
            int pageSize
    );

    /**
     * 根据条件获取运输订单总数
     * @param logisticId 物流ID
     * @param trackingNumber 运单号（支持模糊搜索）
     * @param origin 发货地（支持模糊搜索）
     * @param destination 目的地（支持模糊搜索）
     * @param startDate 出发时间范围的起始日期
     * @param endDate 出发时间范围的��束日期
     * @param state 运单状态
     * @param customerType 客户类型
     * @return 满足条件的运输订单总数
     */
    int getTransportOrderCount(
            String logisticId,
            String trackingNumber,
            String origin,
            String destination,
            String startDate,
            String endDate,
            String state,
            String customerType);

    /**
     * 插入运输订单
     * @param order 运输订单对象
     * @return 是否插入成功
     */
    boolean insertTransportOrder(DelTransportOrder order);

    /**
     * 删除运输订单
     * @param trackingNumber 运单号
     * @return 是否删除成功
     */
    boolean deleteTransportOrder(String trackingNumber);

    /**
     * 修改运输订单
     * @param order 运输订单对象
     * @return 是否修改成功
     */
    boolean updateTransportOrder(DelTransportOrder order);

    /**
     * 根据 trackingNumber 获取所有运输订单明细
     * @param trackingNumber 运单号
     * @return 运输订单明细列表
     */
    List<DelTransportDetail> getDetailsByTrackingNumber(String trackingNumber);

    int confirmTransportOrder(String trackingNumber, String updatedPerson);

    List<DelDeliveryOrderBatch> generateDeliveryOrder(String logisticDeliver, List<String> exclusionVehicle, List<String> trackingNumberList);

    /**
     * 修改预期到货时间
     * @param trackingNumber 运单号
     * @param departureDate 新的到货时间
     * @param updatedPerson 修改人
     */
    public void changeExpectedArrivalTime(String trackingNumber, String departureDate, String updatedPerson);
}
